package gsql

import (
	"fmt"
	"strings"
)

// 构建器
type Builder struct {
	sql  strings.Builder
	args []any
}

// 构建语句
//
//	@params	c		需要构建的语句, 可以是`string`或者`clause`类型
//	@params args	构建参数
func (b *Builder) Builder(c any, args ...any) (e error) {
	switch v := c.(type) {
	case nil:
		// no-op
	case Sqlizer:
		v.ToSql(b)
	case string:
		b.sql.WriteString(v)
		if len(args) > 0 {
			b.args = append(b.args, args...)
		}
	default:
		e = fmt.Errorf("expected string or Sqlizer, not %T", v)
	}

	return e
}

// 获取构建的Sql语句
func (b *Builder) Sql() string {
	return b.sql.String()
}

// 获取构建绑定的参数
func (b *Builder) Args() []any {
	return b.args
}
